package com.lantosec.hmrp.modules.system.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lantosec.hmrp.core.kit.PageVO;
import com.lantosec.hmrp.modules.system.entity.SysDept;
import com.lantosec.hmrp.modules.system.entity.SysDeptPosition;
import com.lantosec.hmrp.modules.system.entity.SysDeptUser;
import com.lantosec.hmrp.modules.system.vo.SysDeptVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 部门表 Mapper 接口
 * </p>
 *
 * @author AutoCode
 * @since 2020-02-12
 */
public interface SysDeptMapper extends BaseMapper<SysDept> {

    List<SysDeptVO> getSysDeptPage(PageVO<SysDeptVO> page);

    String queryMaxDeptIdByParentId(@Param("parentId") String parentId);

    String queryMaxDeptId();

    /**
     * 新增部门岗位挂接表
     * @param param
     */
    void saveSysDeptPosition(@Param("param") SysDeptPosition param);

    /**
     * 查询部门岗位
     * @param deptId
     * @return
     */
    List<SysDeptPosition> getSysDeptPosition(@Param("deptId") String deptId);

    /**
     * 删除部门岗位
     * @param deptId
     * @param positionId
     */
    void deleteSysDeptPosition(@Param("deptId") String deptId, @Param("positionId") String positionId);

    /**
     * 修改部门岗位
     * @param deptId
     * @param positionId
     */
    void updateSysDeptPosition(@Param("deptId") String deptId, @Param("positionId") String positionId);

    /**
     * 查询该部门下的部门负责人岗位
     * @param deptId
     * @return
     */
    String selectSysDeptPosition(@Param("deptId") String deptId);

    /**
     * 修改是否部门负责人为0
     * @param deptId
     * @param positionId
     */
    void updateOldChargePost(@Param("deptId") String deptId, @Param("positionId") String positionId);

    /**
     * 修改是否部门负责人为1
     * @param deptId
     * @param positionId
     */
    void updateNewChargePost(@Param("deptId") String deptId, @Param("positionId") String positionId);

    /**
     * 查询部门下是否有人员
     * @param ids
     * @return
     */
    List<SysDeptUser> getUserInfo(@Param("ids") String ids);

    /**
     * 删除部门下的人员
     * @param userId
     */
    void deleteDeptUser(@Param("userId") String userId);

    /**
     * 设置部门下的岗位为管理岗
     * @param deptId
     * @param positionId
     * @param state
     */
    void updateManagerPost(@Param("deptId")String deptId, @Param("positionId") String positionId, @Param("state") Integer state);

    String getDeptList(String userId);

    String getMainDeptId(String userId);

    /**
     * 根据人员id查询部门(默认主部门)
     * @param userId
     * @return
     */
    SysDeptUser getDeptByUserId(@Param("userId") String userId);

    /**
     * 查询部门下的人员岗位
     * @param key
     * @return
     */
    List<SysDeptUser> getSysDeptUserPosition(String key);

    /**
     * 查询部门岗位下的人数
     * @param deptId
     * @param positionId
     * @return
     */
    List<SysDeptUser> getSysDeptUserSum(@Param("deptId") String deptId, @Param("positionId") String positionId);
}
